//#define _CRT_SECURE_NO_WARNINGS 1
//#include<iostream>
//#include<vector>
//#include<algorithm>
//using namespace std;
//////class Solution {
//////public:
//////    vector<int> singleNumber(vector<int>&& nums) {
//////        vector<int> ret;
//////        sort(nums.begin(), nums.end());
//////        for (int i = 0; i < nums.size();)
//////        {
//////            if (i + 1 < nums.size() && nums[i] ^ nums[i + 1])
//////            {
//////                ret.emplace_back(nums[i]);
//////                i++;
//////            }
//////            else if (i + 1 == nums.size())
//////            {
//////                ret.emplace_back(nums[i]);
//////                break;
//////            }
//////            else i += 2;
//////        }
//////        return ret;
//////    }
//////};
//////int main()
//////{
//////   /* vector<int> ret = Solution().singleNumber({ 0,-1 });
//////    for (int a : ret)
//////        cout << a << " ";
//////    cout << endl;*/
//////    cout << (1 << 0) << endl;
//////    return 0;
//////
////// }
////
////int hammingDistance(int x, int y) {
////    vector<int> tmp;
////    int i = 0;
////    while (tmp.size() != 2)
////    {
////        int a = x & (1 << i);
////        int b = y & (1 << i);
////        if ((a ^ b))
////            tmp.emplace_back(i);
////        i++;
////    }
////
////
////    return tmp[1] - tmp[0];
////}
////
////int main()
////{
////    cout << "hammingDistance(3,1);"
////}
//
////int main()
////{
////	char ch = 90;
////	cout << ch;
////	return 0;
////}
//
////#include<iostream>
////using namespace std;
////int Func(int N)
////{
////    int ret = 0;
////    for (int i = 1; i <= N; i++)
////    {
////        int x = i;
////        int size = 1;
////        while (x)
////        {
////            int lower = x % 10;
////            if ((lower % 2) != (size % 2))
////            {
////                break;
////            }
////            x /= 10;
////            ++size;
////            if (x == 0) ++ret;
////        }
////    }
////    return ret;
////}
////
////int main()
////{
////    int N = 0;
////    cin >> N;
////    cout << Func(N);
////    return 0;
////}
//
//
//class Solution {
//public:
//    string convert(string&& s, int numRows) {
//        int n = s.size();
//        if (n == 1) return s;
//        string ret;
//        vector<vector<char>> vv(numRows);
//        for (auto& v : vv)
//        {
//            v.resize(n);
//        }
//        int k = 0;
//        for (int i = 0; i < n;i++)
//        {
//            int j;
//            if (i > 0) j = 1;
//            else j = 0;
//            for (j; j < numRows; j++)
//            {
//                if (k > n) break;
//                vv[j][i] = s[k++];
//            }
//            //if (k > n) break;
//            for (int j = numRows - 2; j >= 0; j--)
//            {
//                if (k > n) break;
//                vv[j][++i] = s[k++];
//            }
//            //if (k > n) break;
//        }
//        for (auto& v : vv)
//        {
//            for (auto ch : v)
//            {
//                if (ch != ' ') ret += ch;
//            }
//        }
//        return ret;
//    }
//};
//int main()
//{
//    cout<<Solution().convert("PAYPALISHIRING", 4);
//    return 0;
//}
#include<string>
#include<vector>
using namespace std;
//class Solution {
//public:
//    int strStr(string haystack, string needle) {
//        int src = 0,len = needle.size(),dest = 0;
//        while(dest < haystack.size())
//        {
//            int flag = 1;
//            while(src < haystack.size() && haystack[src] != needle[0])
//                ++src;
//            dest = src;
//            while(dest - src < len)
//            {
//                if(haystack[dest] == needle[dest++ - src]);
//                else {
//                    flag = 0;
//                    break;
//                }
//            }
//            if(flag) return src;
//        }
//        return -1;
//    }
//};
class Solution {
public:
    int strStr(string&& haystack, string&& needle) {
        int src = 0, len = needle.size(), dest = 0;
        while (dest < haystack.size())
        {
            int flag = 1;
            while (src < haystack.size() && haystack[src] != needle[0])
                ++src;
            dest = src;
            while (dest - src < len)
            {
                if (haystack[dest] == needle[dest - src]) dest++;
                else {
                    flag = 0;
                    break;
                }
            }
            if (flag) return src;
        }
        return -1;
    }
};
int main()
{
    Solution().strStr("mississippi","issip");
    return 0;
}